"""
此处存放核心代码
"""
import time
from db import db_handler
from lib import common

login_user = None

# 注册功能
def register():
    while True:
        username = input('请输入您的用户名：').strip()
        user_data = db_handler.select(username)

        if user_data:
            print('用户已经存在，请重新输入！')
            continue

        password = input('请输入您的密码：').strip()
        re_password = input('请确认您的密码：').strip()

        if password == re_password:
            db_handler.save(username,password)
            print(f'用户名{username}注册成功！')
            break

        else:
            print('两次密码不一致，请重新输入！')

# 登录功能
def login():
    while True:
        username = input('请输入用户名：').strip()
        user_data = db_handler.select(username)

        if not user_data:
            print('用户不存在，请重新输入用户名！')
            continue

        password = input('请输入密码：').strip()

        # 校验
        if password == user_data[1]:

            global login_user
            login_user = username

            print(f'用户名{username}登陆成功！')
            break

        else:
            print('密码错误~~')

# 充值功能
@common.login_auth
def recharge():
    while True:
        balance = input('请输入您要充值的金额：').strip()
        user_data = db_handler.select(login_user)
        user,pwd,bal = user_data

        old_data = f'{user}:{pwd}:{bal}'

        bal = int(bal)
        if not balance.isdigit():
            print('请输入数字！')

        balance = int(balance)

        bal += balance

        new_data = f'{user}:{pwd}:{bal}'

        db_handler.update(old_data,new_data)
        print(f'当前用户: {login_user} 充值金额：{balance}元！')

        # 日志功能
        now_time = time.strftime('%Y-%m-%d %X')
        log_date = f'时间：{now_time}  用户名：{login_user} 充值金额：{balance}'
        print(log_date)
        common.append_logger(log_date)

        break

# 阅读小说功能
@common.login_auth
def reader():
    story_dic = db_handler.get_all_story()

    if not story_dic:
        print('没有小说，请联系管理员传~~')
        return


    while True:
        print('''
        === 欢迎来到阅读小说功能主页 ===
                0 玄幻武侠
                1 都市爱情
                2 高效养猪36技
        ============ end ============
        ''')

        # 让用户选择
        choice1 = input('请输入小说类型编号(输入q退出)：').strip()

        if choice1 not in story_dic:
            print('输入有误，请重新输入！')
            continue

        # 获取小说数据
        fiction_dic = story_dic.get(choice1)

        # 打印当前所有小说
        for number,fiction_list in fiction_dic.items():
            name,price = fiction_list
            print(f'小说编号：[{number}] 小说名字：[{name}] 小说价格：[{price}]')

        while True:
            choice2 = input('请输入需要购买的小说编号：').strip()
            if choice2 not in fiction_dic:
                print('输入有误，请重新输入！！！')
                continue

            name,price = fiction_dic.get(choice2)

            choice3 = input(f'当前选择的小说名是：[{name}],商品的单价为：[{price}],请输入y购买，或者退出程序：').strip()

            if choice3 =='y':

                user,pwd,bal = db_handler.select(login_user)

                # 当前金额
                bal = int(bal)
                # 小说单价
                price = int(price)

                if bal<price:
                    print('余额不足，请先充值！！')
                    break

                # 10 开始扣费
                # 10.1) 拼接用户修改的数据
                old_data = f'{user}:{pwd}:{bal}'

                # 10.2) 开始对用户金额做递减操作
                bal -= price

                # 10.3) 拼接用户修改后的数据
                new_data = f'{user}:{pwd}:{bal}'
                db_handler.update(old_data, new_data)

                print('当前小说购买成功，自动打开小说阅读~~~')

                # 调用获取小说详细信息数据
                fiction_data = db_handler.show_fiction_data(name)
                print(f'''
                ===== 当前小说数据如下 ====
                {fiction_data}
                ''')

                # 日志功能
                now_time = time.strftime('%Y-%m-%d %X')
                log_date = f'时间：{now_time}  用户名：{login_user} 消费金额：{price}'
                print(log_date)
                common.append_logger(log_date)

                break

        break



# 功能字典
func_dic = {
    '0': register,
    '1': login,
    '2': recharge,
    '3': reader,
}


# 启动函数
def run():
    while True:
        print('''
        ============= 欢迎来到小说阅读器 =======
                     0 账号注册
                     1 登录功能
                     2 充值功能
                     3 阅读小说
        ================= end ================
        ''')

        choice = input('请输入编号(输入q退出)：').strip()

        if choice =='q':
            break

        if choice not in func_dic:
            print('请输入正确的编号！')
            continue

        func_dic.get(choice)()

